#include<stdio.h>

//排序算法

void BubbleSort(int*a,int len)
{
    for(int i=0;i<len-1;i++)
    {
        int flag=0;
        for(int j=0;j<len-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                flag=1;
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
        if(flag==0)
        {
            break;
        }
    }
    return 0;
}

void PrintArray(int*a,int len)
{
    for(int i=0;i<len;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

void InsertSort(int*a,int len)
{
    for(int i=1;i<len;i++)
    {
        int temp=a[i];
        int j=i;
        for(;j>0;j--)
        {
            if(a[j-1]>temp)
            {
                a[j]=a[j-1];
            }
            else
            {
                break;
            }
        }
        a[j]=temp;
    }
}

void ChooseSort(int*a,int len)
{
    for(int i=0;i<len;i++)
    {
        int min=i;
        for(int j=i+1;j<len;j++)
        {
            if(a[j]<a[min])
            {
                min=j;
            }
        }
        int temp=a[i];
        a[i]=a[min];
        a[min]=temp;
    }
}

void ChooseSort2(int*a,int len)
{
    int left=0;
    int right=len-1;
    while(left<right)
    {
        int min=left;
        int max=right;
        for(int i=left;i<=right;i++)
        {
            if(a[i]<a[min])
            {
                min=i;
            }
            if(a[i]>a[max])
            {
                max=i;
            }
        }
        int temp=a[left];
        a[left]=a[min];
        a[min]=temp;

        if(max==left)
        {
            max=min;
        }

        temp=a[right];
        a[right]=a[max];
        a[max]=temp;

        left++;
        right++;
    }
}

//快速排序：
void Fastsort(int *a,int start, int end)
{
    int temp=a[start];
    int left=start;
    int right=end;
    while(left<right)
    {
        if(start>=end)
        {
            return;
        }
        while(left<right&&a[right]>temp)
        {
            right--;
        }
        if(left<right)
        {
            a[left]=a[right];
            left++;
        }
        while(left<right&&a[left<temp])
        {
            left++;
        }
        if(left<right)
        {
            a[right]=a[left];
            right--;
        }
    }
    a[left]=temp;
    //递归：
    Fastsort(a,start,left-1);
    Fastsort(a,right,end);
}
//顺序查找：
int FindElementbyindex(int *a,int len,int target)
{
    for(int i=0;i<len;i++)
    {
        if(a[i]==target)
        return i;
    }
    return -1;
}
//二分查找：
int Binaryfind(int *a,int len,int target)
{
    int left=0;
    int right=len-1;
    while(left<=right)
    {
        int mid=left+(right-left)/2;
        if(a[mid]==target)
        return mid;
        if(a[mid]>target)
            right=mid-1;
        if(a[mid]<target)
        left=mid+1;
    }
    return -1;
}

int main()
{
    int a[]={3,9,56,8,93,2};
    //Fastsort(a,0,sizeof(a)/4-1);
    PrintArray(a,sizeof(a)/4);
    return 0;
}